/**
 * Storage封装
 * sessionStorage每次只能设置一个key/value, 只能存储字符串
 * 即
 * sessionStorage.token = "123456789"
 * sessionStorage.user = "admin"
 * 封装的目的，把所有的信息都封装到一个属性中，并用json格式存储,方便读取
 * 封装后：sessionStorage.mall = "{"token":"123456789","user":"admin"}"
 */
const STORAGE_KEY = 'mall'
export default {
  // 将值存储到mall中
  setItem(key, value, module_name) {
    if (module_name) {
      let val = this.getItem(module_name)
      val[key] = value
      this.setItem(module_name, val)
    }
    let val = this.getStorage()
    val[key] = value
    window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val))
  },
  // 从mall里获取值
  getItem(key, module_name) {
    /**
     * key值得是返回的对象中的属性
     * getItem(token)
     * 返回 token的值
     * module_name是mall里面的模块名，是一个对象
     * 
     */
    // 判断如果有模块的话先获取模块
    if (module_name) {
      let val = this.getItem(module_name)
      // 如果模块不为空则返回属性的值
      if (val) return val[key]
    }
    return this.getStorage()[key]

  },
  getStorage() {
    // 获取定义好的mall
    /**
     * 此时返回的值为JSON格式的数据
     * {
     *  token: "123456789",
     *  user: "admin"
     * }
     */
    return JSON.parse(window.sessionStorage.getItem(STORAGE_KEY || '{}'))
  },
  clear(key, module_name) {
    let val = this.getStorage()
    if (module_name) {
      if (!val[module_name]) return
      delete val[module_name][key]
    } else {
      delete val[key]
    }
    window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify(val))

  }

}